cmake_minimum_required(VERSION 2.8.10)

project(asmjs_optimizer)

file(GLOB sourceFiles *.cpp)
file(GLOB headerFiles *.h)

if (CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX OR CMAKE_C_COMPILER MATCHES ".*(gcc|clang|emcc).*" OR CMAKE_C_COMPILER_ID MATCHES ".*(GCC|Clang|emcc).*")
	set(IS_GCC_LIKE TRUE)
else()
	set(IS_GCC_LIKE FALSE)
endif()

# -DCMAKE_CXX_FLAGS=-DPROFILING will print crude timing information to stderr
# for initial identification of areas to profile in more depth with
# CALLGRIND_{START,STOP}_INSTRUMENTATION or similar
# Don't forget to also pass -DCMAKE_BUILD_TYPE=Release to cmake or your build
# won't be optimized by the compiler!

if (IS_GCC_LIKE)
	set(cFlags "-fno-exceptions -fno-rtti")

	if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.7")
		set(cFlags "${cFlags} -std=c++0x")
	else()
		set(cFlags "${cFlags} -std=c++11")
	endif()
endif()

if (MSVC)
	set(cFlags "${cFlags} -D_CRT_SECURE_NO_WARNINGS=1")
	set(cFlagsDebug "${cFlagsDebug} /bigobj") # Debug build in Visual Studio is large and generates error C1128 if not explicitly recognized, so pass /bigobj for that
	set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:10485760")
endif()

set(CMAKE_C_FLAGS_DEBUG     "${CMAKE_C_FLAGS_DEBUG} ${cFlagsDebug}")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${cFlagsDebug}")

set(CMAKE_C_FLAGS     "${CMAKE_C_FLAGS} ${cFlags}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${cFlags}")

add_executable(optimizer ${sourceFiles} ${headerFiles})
